package com.autumn.platform.core.support.tree;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface ITree<E extends ITreeNode> extends Serializable {

    /**
     * 获取虚拟根节点
     */
    public E getVirtualRoot();

    /**
     * 根据内部节点ID获取节点
     * 
     * @param id 内部节点ID，构建树时自动生成的ID
     * @return 树节点
     */
    public E getNode(int id);

    /**
     * 根据代码查找节点
     * 
     * @param code 节点代码
     * @return 树节点
     */
    public E getNode(String code);

    /**
     * 是否包括指定代码的节点
     * 
     * @param code 节点代码
     * @return 是否包含
     */
    public boolean containsCode(String node);

    /**
     * 深度优先获取节点集(深度优先)
     * 
     * @return 节点集
     */
    public List<E> getNodes();

    /**
     * 获取节点集，并使用过滤器过滤(深度优先)
     * 
     * @param filter 节点过滤器
     * @return 节点集
     */
    public List<E> getNodes(ITreeNodeFilter filter);

    /**
     * 获取节点代码和节点关系的Map
     * 
     * @return
     */
    public Map<String, E> getNodesMap();

    /**
     * 重新构建
     * 
     * @param nodes
     */
    public void build(List<E> nodes);
}
